package ar.edu.caece.compiler.grammar.factories;

import ar.edu.caece.compiler.grammar.AbstractTokenVisitorFactory;
import ar.edu.caece.compiler.grammar.GrammarSymbol;
import ar.edu.caece.compiler.grammar.ParsingException;
import ar.edu.caece.compiler.grammar.TokenVisitorInterface;
import ar.edu.caece.compiler.grammar.nonterminals.OP11;
import ar.edu.caece.compiler.grammar.terminals.SumaEnteroToken;
import ar.edu.caece.compiler.grammar.terminals.GrammarTerminal;

public class OP11Factory extends AbstractTokenVisitorFactory {

	private static OP11Factory INSTANCE;
	
	public static OP11Factory getInstance() {
		if(INSTANCE==null) INSTANCE = new OP11Factory();
		return INSTANCE;
	}
	
	private OP11Factory() {
		
	}
	
	@Override
	public TokenVisitorInterface makeChainedVisitor(
			final TokenVisitorInterface siguiente) throws Exception {
		return new SumaEnteroToken.SumaEnteroChainVisitor(siguiente) {
			
			@Override
			public GrammarSymbol sumaEnteroCase(SumaEnteroToken llamador) {
				return new OP11(llamador);
			}
		};
	
	}
	@Override
	public TokenVisitorInterface makeVisitor() throws Exception {
		return new SumaEnteroToken.SumaEnteroTokenVisitor() {
			
			@Override
			public GrammarSymbol defaultCase(GrammarTerminal llamador) throws Exception {
				throw new ParsingException("Error de parsing.",OP11.class,llamador);
			}
			
			@Override
			public GrammarSymbol sumaEnteroCase(SumaEnteroToken llamador) {
				return new OP11(llamador);
			}
		};
	}
	
	
}
